#! /usr/bin/python
# -*- coding: utf-8 -*-

from tag import *
from validator import *

#
#ValidTagConfig includes Three main sections:
#   commonAttributes
#   htmlTags
#   mathmlTags
#
ValidTagConfig = {
    'commonAttributes': {
        'id': {
            'validatorClass': IdValidator,
        }
    },
    'htmlTags': {
        'root':{
            'tagClass': RootTag
        },
        'p':{
            'attributes': {
                'style': {
                    'validatorClass': StyleValidator,
                    'validStyles': ['text-align']
                }
            },
            'tagClass': HtmlTag
        },
        'ol':{
            'tagClass': HtmlTag
        },
        'ul':{
            'tagClass': HtmlTag
        },
        'li':{
            'tagClass': HtmlTag
        },
        'span':{
            'attributes': {
                'style': {
                    'validatorClass': StyleValidator,
                    'validStyles': ['color', 'background-color', 'font-family', 'font-size', 'text-decoration']
                }
            },
            'tagClass': HtmlTag
        },
        'strong':{
            'tagClass': HtmlTag
        },
        'em':{
            'tagClass': HtmlTag
        },
        'sub':{
            'tagClass': HtmlTag
        },
        'sup':{
            'tagClass': HtmlTag
        },
        'img':{
            'attributes': {
                'src': {
                    'validatorClass': LinkValidator
                },
                'alt': {
                    'validatorClass': PureTextValidator
                },
                'width': {
                    'validatorClass': HtmlLengthValidator
                },
                'height': {
                    'validatorClass': HtmlLengthValidator
                }
            },
            'tagClass': HtmlTag
        },
        'a':{
            'attributes': {
                'href': {
                    'validatorClass': LinkValidator
                },
                'title': {
                    'validatorClass': PureTextValidator
                },
                'target': {
                    'validatorClass': NameValidator
                }
            },
            'tagClass': HtmlTag
        },
        'b':{
            'tagClass': HtmlTag
        },
        'u':{
            'tagClass': HtmlTag
        },
        'i':{
            'tagClass': HtmlTag
        }
    },
    'mathmlTags': {
        'math':{
            'attributes': {
                'xmlns': {
                    'validatorClass': MathXmlnsValidator
                }
            },
            'tagClass': MathTag
        },
        'msup':{
            'tagClass': MathTag
        },
        'msub':{
            'tagClass': MathTag
        },
        'msubsup':{
            'tagClass': MathTag
        },
        'mfenced':{
            'attributes': {
                'open': {
                    'validatorClass': MfencedOpenValidator
                },
                'close': {
                    'validatorClass': MfencedCloseValidator
                }
            },
            'tagClass': MathTag
        },
        'msqrt':{
            'tagClass': MathTag
        },
        'mfrac':{
            'tagClass': MathTag
        },
        'mrow':{
            'tagClass': MathTag
        },
        'munder':{
            'tagClass': MathTag
        },
        'mover':{
            'tagClass': MathTag
        },
        'mi':{
            'tagClass': MathTag
        },
        'mo':{
            'tagClass': MathTag
        },
        'mn':{
            'tagClass': MathTag
        },
        'mtext':{
            'tagClass': MathTag
        },
        'matrix':{
            'tagClass': MathTag
        },
        'matrixrow':{
            'tagClass': MathTag
        },
        'mspace':{
            'attributes': {
                'width': {
                    'validatorClass': MspaceWidthValidator
                }
            },
            'tagClass': MathTag
        },
        'mtable':{
            'tagClass': MathTag
        },
        'mtr':{
            'tagClass': MathTag
        },
        'mtd':{
            'attributes': {
                'columnalign': {
                    'validatorClass': MtdColumnalignValidator
                }
            },
            'tagClass': MathTag
        }
    },
}

#Generate 'valid_elements' config for tinyMCE
def tinymceValidElementsConfig():
    ValidElements = ''
    commonAttributesConfig = ValidTagConfig.get('commonAttributes')
    if commonAttributesConfig:
        ValidElements += '@['
        for commonAttr in commonAttributesConfig:
            ValidElements += commonAttr + '|'
        ValidElements = ValidElements.rstrip('|')
        ValidElements += '],'
    htmlTagsConfig = ValidTagConfig.get('htmlTags')
    if htmlTagsConfig:
        for htmlTag in htmlTagsConfig:
            if htmlTag != 'root':
                ValidElements += htmlTag
                htmlTagAttrConfig = htmlTagsConfig[htmlTag].get('attributes')
                if htmlTagAttrConfig:
                    ValidElements += '['
                    for tagAttr in htmlTagAttrConfig:
                        ValidElements += tagAttr + '|'
                    ValidElements = ValidElements.rstrip('|')
                    ValidElements += ']'
                ValidElements += ','
    ValidElements = ValidElements.rstrip(',')
    return ValidElements